// setTimeout(()=>{
//   console.log('s1')
// })

// Promise.resolve().then(()=>{
//   console.log('p1')
// })

// console.log('start')

// process.nextTick(()=>{
//   console.log('tick')
// })

// setImmediate(()=>{
//   console.log('setImmediate')
// })

// console.log('end')

// // start
// // end
// // tick //process.nextTick和Promise都是微任务，但tick优先度高
// // p1
// // s1
// // setImmediate

// setTimeout(()=>{
//   console.log('s1')
//   Promise.resolve().then(()=>{
//     console.log('p1')
//   })
//   process.nextTick(()=>{
//     console.log('t1')
//   })
// })

// Promise.resolve().then(()=>{
//   console.log('p2')
// })

// console.log('start')

// setTimeout(()=>{
//   console.log('s2')
//   Promise.resolve().then(()=>{
//     console.log('p3')
//   })
//   process.nextTick(()=>{
//     console.log('t2')
//   })
// })

// console.log('end')

// // start
// // end
// // p2
// // s1
// // t1
// // p1
// // s2
// // t2
// // p3

// // 老版本node执行顺序是 start,end,p2,s1,s2,t1,t2,p1,p3
// // 新版本执行顺序与浏览器统一了，所以是上面的顺序

// setTimeout(()=>{
//   console.log('timeout')
// })

// setImmediate(()=>{
//   console.log('immediate')
// })

// // 现象1: 上面代码多次快速执行时，顺序可能会错乱
// // 原因,setTimeout默认时间0可能会有不稳定因素,可能有延迟可能没有

const fs = require('fs')

fs.readFile('./02-pub-sub.js',()=>{
  setTimeout(()=>{
    console.log('timeout')
  })

  setImmediate(()=>{
    console.log('immediate')
  })
})
// 现象2: 此处示例顺序为固定的immediate timeout
// 原因: readFile回调为poll，poll回调中按顺序先切换到immediate，结束后重新执行事件环,再执行timeout
